1. Field of the Invention
Embodiments of the present invention relate, in general, to systems and methods for software distribution and particularly to dynamic composition of a virtual file system tree from multiple read-only file system images representing multiple software components.
2. Relevant Background
Computers pervade today's society as most consumer electronic devices include a small embedded computer. Cell phones, digital video device players, personal digital assistants, home wireless routers, cable set-top boxes and televisions all possess a computer of some sort. While each of these consumer products possesses a processor, memory and some form of a storage medium, consumer devices operate differently than the typical laptop or desktop computer.
Small consumer devices are typically firmware driven. This means that the device operates using software that comes in the form of a single opaque image (firmware); once downloaded, the software is ready to run. If upgrades exist, they can be downloaded from the vendor as a completely new image. Turn the machine off and back on and the new version essentially replaces the old version and runs perfectly. Typically, if one possessed the capability, one could extract a version of firmware from one machine, a cell phone for example, and load it into another without fear that it would not operate. Consumer devices have long followed the path that, with respect to code operating the device, a single, identical image is used for all machines.
This is not the case for laptops, desktops and other general application computers. A personal computer (“PC”) is designed to offer a very flexible computing environment. While many users may desire to use Microsoft Windows, one user may wish to use Intuit's Quicken while another user prefers Microsoft Money. The firmware model described above would not allow for this type of flexibility. Consumer electronic devices have the advantage of having very specialized functions. Despite the versatilities of a cell phone, its functions are relatively limited compared to a laptop. As a result, the installation of software in a PC has evolved into a very complicated process. Typically a run-time software environment for a PC is not one file but a system of files (file system). Software components such as an operating system or applications, which typically comprise multiple files, are distributed in the form of packages containing all the files of which the software component consists. A separate program, the installer, extracts data from the files and places them on the hard drive of the PC. The installed files are very different from the image on the original software file.
Currently, operating systems on PCs, servers and the like create a file system tree to organize files. The file system tree contains numerous directories. When additional software is installed, such as Adobe Acrobat, certain files of a specific type are added to the existing directories. The new software does not create an entirely new directory tree, but, rather, augments the existing tree. For example, when Adobe installs additional drivers to ensure the functionality of the Adobe product, those drivers are placed in the directory in which Windows expects drivers to exist. For example, dynamic loadable libraries, DLLs, cannot be placed anywhere, they must reside in particular directories. In a similar manner, software is developed and installed so as to look for particular files in particular locations. In some cases, software developers rely on the fact that another application has already established the presence of a particular file in the directory and therefore does not include it in the software but simply directs its application. As you might expect, several directories become common for several separate applications. This explains why some software requires the presence of another and why an installation of one software, when it overwrites a particular file, may render another inoperable.
In a consumer electronic device such as a cell phone, the upgrade of the software image (firmware) running the cell phone typically does not alter configuration (customization) settings. This is because the configuration settings and the software image (firmware) are stored in physically separate portions of the device, and when the software image (firmware) is overwritten with a new one, the configuration settings remain intact. In a PC, configuration (customization) settings are also kept separately from the originally installed software, but this separation is logical rather than physical. This means that the software components (operating system and applications) store configuration (customization) settings in separate files, keeping the files that comprise the originally installed software intact. Thus, the configuration (customization) settings are not altered by individual software components upgrades. However, recall that the files containing configuration (customization) settings are stored in the same file system as the software components files. Therefore, when one attempts to upgrade the system by replacing an entire file system (for example by overwriting the entire file system image), then configuration settings are lost.
Most of the files that are created on a computer system's storage during an installation do not depend on any one system. The distinction in these files as compared to each other is confined to a small number of configuration files that generally occupy less that 0.1% of the stored files. Thus, if one can identify all the files containing configuration (customization) settings, these files can be easily extracted from a file system, and the file system can be replaced as in a firmware example. However, this approach lacks flexibility and it is limited by its inability to allow further composition.